{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**User testing with the Wine Quality data set from the UCI repository**\n",
    "Data consist of wine quality catogorization (on a scale of 1-12) with 10 features. This is the white wine data set."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import os\n",
    "import sys \n",
    "\n",
    "# Modify the path \n",
    "sys.path.append(\"..\")\n",
    "\n",
    "import pandas as pd\n",
    "import yellowbrick as yb \n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "wine = pd.read_csv('Dropbox/DataScience/YellowBrick/whitewine.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/tuulimorrill/anaconda3/lib/python3.6/site-packages/sklearn/cross_validation.py:44: DeprecationWarning: This module was deprecated in version 0.18 in favor of the model_selection module into which all the refactored classes and functions are moved. Also note that the interface of the new CV iterators are different from that of this module. This module will be removed in 0.20.\n",
      "  \"This module will be removed in 0.20.\", DeprecationWarning)\n"
     ]
    }
   ],
   "source": [
    "# Feature Analysis Imports \n",
    "# NOTE that all these are available for import from the `yellowbrick.features` module \n",
    "from yellowbrick.features.rankd import Rank2D \n",
    "from yellowbrick.features.radviz import RadViz \n",
    "from yellowbrick.features.pcoords import ParallelCoordinates"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>fixed acidity</th>\n",
       "      <th>volatile acidity</th>\n",
       "      <th>citric acid</th>\n",
       "      <th>residual sugar</th>\n",
       "      <th>chlorides</th>\n",
       "      <th>free sulfur dioxide</th>\n",
       "      <th>total sulfur dioxide</th>\n",
       "      <th>density</th>\n",
       "      <th>pH</th>\n",
       "      <th>sulphates</th>\n",
       "      <th>alcohol</th>\n",
       "      <th>quality</th>\n",
       "      <th>qualitybin</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>7.0</td>\n",
       "      <td>0.27</td>\n",
       "      <td>0.36</td>\n",
       "      <td>20.7</td>\n",
       "      <td>0.045</td>\n",
       "      <td>45.0</td>\n",
       "      <td>170.0</td>\n",
       "      <td>1.0010</td>\n",
       "      <td>3.00</td>\n",
       "      <td>0.45</td>\n",
       "      <td>8.8</td>\n",
       "      <td>6</td>\n",
       "      <td>low</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>6.3</td>\n",
       "      <td>0.30</td>\n",
       "      <td>0.34</td>\n",
       "      <td>1.6</td>\n",
       "      <td>0.049</td>\n",
       "      <td>14.0</td>\n",
       "      <td>132.0</td>\n",
       "      <td>0.9940</td>\n",
       "      <td>3.30</td>\n",
       "      <td>0.49</td>\n",
       "      <td>9.5</td>\n",
       "      <td>6</td>\n",
       "      <td>low</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>8.1</td>\n",
       "      <td>0.28</td>\n",
       "      <td>0.40</td>\n",
       "      <td>6.9</td>\n",
       "      <td>0.050</td>\n",
       "      <td>30.0</td>\n",
       "      <td>97.0</td>\n",
       "      <td>0.9951</td>\n",
       "      <td>3.26</td>\n",
       "      <td>0.44</td>\n",
       "      <td>10.1</td>\n",
       "      <td>6</td>\n",
       "      <td>low</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>7.2</td>\n",
       "      <td>0.23</td>\n",
       "      <td>0.32</td>\n",
       "      <td>8.5</td>\n",
       "      <td>0.058</td>\n",
       "      <td>47.0</td>\n",
       "      <td>186.0</td>\n",
       "      <td>0.9956</td>\n",
       "      <td>3.19</td>\n",
       "      <td>0.40</td>\n",
       "      <td>9.9</td>\n",
       "      <td>6</td>\n",
       "      <td>low</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>7.2</td>\n",
       "      <td>0.23</td>\n",
       "      <td>0.32</td>\n",
       "      <td>8.5</td>\n",
       "      <td>0.058</td>\n",
       "      <td>47.0</td>\n",
       "      <td>186.0</td>\n",
       "      <td>0.9956</td>\n",
       "      <td>3.19</td>\n",
       "      <td>0.40</td>\n",
       "      <td>9.9</td>\n",
       "      <td>6</td>\n",
       "      <td>low</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   fixed acidity  volatile acidity  citric acid  residual sugar  chlorides  \\\n",
       "0            7.0              0.27         0.36            20.7      0.045   \n",
       "1            6.3              0.30         0.34             1.6      0.049   \n",
       "2            8.1              0.28         0.40             6.9      0.050   \n",
       "3            7.2              0.23         0.32             8.5      0.058   \n",
       "4            7.2              0.23         0.32             8.5      0.058   \n",
       "\n",
       "   free sulfur dioxide  total sulfur dioxide  density    pH  sulphates  \\\n",
       "0                 45.0                 170.0   1.0010  3.00       0.45   \n",
       "1                 14.0                 132.0   0.9940  3.30       0.49   \n",
       "2                 30.0                  97.0   0.9951  3.26       0.44   \n",
       "3                 47.0                 186.0   0.9956  3.19       0.40   \n",
       "4                 47.0                 186.0   0.9956  3.19       0.40   \n",
       "\n",
       "   alcohol  quality qualitybin  \n",
       "0      8.8        6        low  \n",
       "1      9.5        6        low  \n",
       "2     10.1        6        low  \n",
       "3      9.9        6        low  \n",
       "4      9.9        6        low  "
      ]
     },
     "execution_count": 59,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "wine.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "count    4898.000000\n",
       "mean        5.877909\n",
       "std         0.885639\n",
       "min         3.000000\n",
       "25%         5.000000\n",
       "50%         6.000000\n",
       "75%         6.000000\n",
       "max         9.000000\n",
       "Name: quality, dtype: float64"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "wine.quality.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "#add a new column to create a binary class for wine quality \n",
    "winemed = wine.quality.median()\n",
    "wine['qualitybin'] = wine['quality'].apply(lambda x: str('high') if x > 6 else str('low'))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "count     4898\n",
       "unique       2\n",
       "top        low\n",
       "freq      3838\n",
       "Name: qualitybin, dtype: object"
      ]
     },
     "execution_count": 70,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "wine.qualitybin.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "# Load the classification data set\n",
    "data = wine\n",
    "\n",
    "# Specify the features of interest\n",
    "features = [\n",
    "        'fixed acidity', 'volatile acidity', 'citric acid', 'residual sugar', 'chlorides', 'free sulfur dioxide',\n",
    "        'density', 'pH', 'sulphates', 'alcohol'\n",
    "    ]\n",
    "\n",
    "# Extract the numpy arrays from the data frame\n",
    "X = data[features].as_matrix()\n",
    "y = data['quality'].as_matrix()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([6, 6, 6, ..., 6, 7, 6])"
      ]
     },
     "execution_count": 66,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Rank 2D**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAgUAAAG6CAYAAACY6DUwAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XtYlHX+//EXg+CAgodMV80M0dBEBc8ihqGt2s/Datia\nZuYlCtpmaWqapaZZppvmISmJatXaTMtcD1lWrtWWBzwuaUem0kyNDFTOh/n94TJfx1sQnJFB7+fj\nuu7raj5z85k3N+T95v3+3PftZbfb7QIAAKZn8XQAAACgciApAAAAkkgKAADA/5AUAAAASSQFAADg\nf0gKAJgGF1sBpSMpuAZs3LhR9913nzp06KCOHTtq+PDh2rFjh6fDkiQdO3ZMISEh+vTTTz0dymVF\nR0crJCTEaWvVqpWio6M1b9485eXlufXz3n33XYWEhCg3N/eS7y9dulRdu3Z162deqWXLlqljx44K\nDw/XgQMHSt33119/VXh4uH744QfDeytXrlR0dLTatGmjESNGXHKfC02dOtXwMyne7rzzTpe+p4sl\nJydr8uTJbp0TuN5U8XQAKJndbtdjjz2mDz/8UMOGDdOYMWNUWFioTZs2acyYMXrqqac0ZMgQj8ZY\nt25drVmzRsHBwR6No6wGDBigoUOHOl5nZWVp586dSkxMlN1u17Rp0yoslsGDBys6OrrCPq8kaWlp\nWrp0qYYMGaK+ffsqJCSkxH1///13jRkzRllZWYb31q5dq+eee04PP/ywmjZtqhUrVmjkyJF6//33\nVa1atRLnbNasmZ5++mnDeNWqVa/sGyrBunXr9PPPP7t1TuB6Q1JQia1Zs0YbN27Ua6+9ps6dOzvG\n77jjDvn6+uqZZ57Rn//8Z9WuXdtjMfr6+iosLMxjn19edevWNcQbERGh48ePa8OGDRWaFPzpT3/S\nn/70pwr7vJKcOXNGktSnTx916NChxP127NihmTNnXjIhsNvtWr58ue6//36NGTNGktShQwd1795d\n7733noYNG1bivP7+/tfU7xBwPaN9UIn94x//UM+ePZ0SgmJ/+9vfNGTIEGVmZjrGtmzZooEDB6pN\nmzbq0aOH469f6XyZtn///k5zFBQUqFOnTkpKSpIknThxQpMnT1ZERIRatmyp6OhoJSQkOPZ/9913\ndfvtt+vFF19Uhw4d1K9fPx09etTQPnj33Xf1l7/8Ra1bt1Z4eLhGjhyp77//3vF+dHS0Xn/9dU2b\nNk3t2rVTx44dNWfOHOXn5zv2ycrK0tNPP63IyEi1bdtWo0aNcipFnz17Vk8++aQ6deqksLAwxcfH\n65dffrnSQ63q1as7vc7Ly9PChQvVs2dPhYaGqnPnzpo6darOnTsn6f/aJjt27NCIESPUunVr3XHH\nHXrrrbdK/IxDhw4pPDxcM2bMkGRsH4SEhGjDhg3629/+prCwMHXt2lXLli1zmuPnn39WbGyswsPD\nFR0drfXr1+vOO+/Uu+++W+LnpqWlaerUqYqMjFRYWJhGjx7tOJbvvvuu+vTpI0kaMWKEhg8fXuI8\n8fHxuv322zVv3jzDez/99JOOHz+uHj16OMYCAgLUoUMHff755yXOWVYnT57UI488onbt2qldu3aa\nPHmy/vjjD6d9Svu9mzp1qtavX6+DBw8qJCREx44du2T75tNPP3W8L0nDhw/XU089peHDh6t169Z6\n+eWXJUk//PCDYmNjFRYWpk6dOmnOnDnKyclxzHPq1Ck99NBD6tSpkyOWI0eOuHwcgKuNpKCSOnny\npFJTU9WtW7dLvt+wYUM9/vjjatSokSRp9erVmjhxojp27KgXX3xRAwcO1OLFi7VgwQJJ5/8K/Oab\nb5zKpzt37lRGRobuuusuFRUVKTY2Vj/++KPmzJmjxMRERURE6IUXXtB//vMfx9f8/vvv2r59u154\n4QVNnDhRXl5eTnFt2bJF06dPV58+ffTKK69o5syZSk1N1RNPPOG039KlS+Xl5aWlS5dq1KhRWr16\ntdauXet4/5FHHtGmTZv00EMPacmSJcrNzdWoUaOUlZWloqIixcXFaceOHZo2bZr+/ve/67ffftP9\n99/vlCRdit1uV0FBgWNLT0/Xxo0b9d577zlOjpI0d+5crVu3Tg8++KCSkpIUGxurTZs2KTEx0Wm+\nadOmqUuXLnr55ZfVtm1bzZw50ykBKvbzzz8rPj5eUVFRmjVrVonxPf3007r55puVkJCgu+66S0uX\nLnWsH8nJydEDDzygtLQ0LViwQPHx8Zo3b55+/fXXEuc7d+6chgwZov379zuO1R9//KGhQ4fq119/\nVffu3bVo0SJJ0owZMzRz5swS59q4caNmz559yVbAjz/+KEm6+eabncZvuummMpXsL/yZFG/FsrKy\ndP/99+vbb7/V3LlzNWfOHO3fv19xcXEqLCyUdPnfu3HjxikqKkrNmjXTmjVrVLdu3cvGVOztt99W\nmzZttHTpUvXo0UMnT57UsGHDlJmZqYULF2rKlCnavHmzpkyZ4viayZMn65dfftG8efO0ZMkSZWdn\na8yYMU7fF1AZ0T6opE6ePClJql+//mX3LSws1NKlSxUTE+Mof0dGRsrLy0sJCQmKjY1V165dVbNm\nTX3wwQcaPXq0JOmDDz5QWFiY6tevr+PHj6tWrVp66qmn1KRJE0lSly5d9MEHH2jv3r2Ov6gKCgo0\nYcIEx+viv6iKHT16VA888IDi4uIcY+np6Zo3b56KiopksZzPQ4ODg/XMM89IOl++3759uz799FMN\nHTpUX3/9tXbs2KEXX3xRPXv2lCS1aNFCgwcP1pEjR3Tu3Dnt3btXa9ascZSdO3bsqO7du2vt2rV6\n4IEHSjxWr7zyil555RWnsVq1aunee+/VI4884hj7448/NG3aNPXr10+S1KlTJ+3du1d79+51+tpB\ngwYpPj5ektSmTRtt3bpVn376qZo2berY5/Tp04qNjVWLFi00f/58xzG4lMjISMfJpXPnzo75oqKi\n9K9//Uu//fab3nrrLcdJrUaNGho/fnyJ873zzjs6ceKEtm7dqptuusnxvfTo0UOvvvqqpk+f7lhD\n0LRpU6e4L1bae8UVlIsThmrVql02UTt48KBatmxpGD906JCqVq2q9evX65dfftEHH3yghg0bSpJu\nu+029enTR9u3b1fPnj0v+3t38803q3bt2kpPTy93q+KGG27QpEmTHK/nz58vLy8vJSYmOipMDRo0\n0AMPPKAjR46oRYsW2rdvn/72t7/pjjvukCQ1atRI77zzjrKyshQYGFiuzwcqEklBJeXt7S1JKioq\nuuy+qampSk9PV+/evZ3G77rrLi1ZskQHDx7UHXfcoT//+c/atm2bRo8ercLCQn300UcaO3aspPP/\nqK1atUqFhYVKTU2VzWbT4cOHVVBQ4FTWl6SgoKASYyn+Rzk9PV0//PCDUlNTtX37dsdf6L6+vpKk\n1q1bO31dvXr1HOXgffv2yWKxKCoqyvH+DTfcoE8++USStGDBAtWsWVOhoaGOv7yK+9K7du0qNSkY\nOHCghg0bJrvdrs8//1wvvviiRo8erVGjRjntt2TJEknnV9qnpqbqu+++0w8//KBatWo57demTRvH\nf/v7+yswMNDQcx87dqx++uknvfTSS47vvyQXzufl5aV69eo55tu1a5datWrl9Fduz549VaVKyf8b\n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\nAJgStzk24ogAAABJVAoAAGZF+8CApAAAYE4kBQa0DwAAgCQqBQAAk2KhoRFJAQDAnGgfGJAmAQAA\nSVQKAADsL9cFAAAf/UlEQVRmRaXAgKQAAGBKPBDJiPYBAACQRKUAAGBWXH1gQFIAADAn1hQYkCYB\nAABJJAUAAJPysni7dSuPw4cPKyYmRmFhYRowYIAOHDhwyf3efvtt/fnPf1bbtm119913Kzk52fFe\nUlKSQkNDFR4e7tgufP9KkBQAAMzJYnHvVka5ubmKj4/XoEGDtGfPHg0fPlxjx45VZmam0347d+7U\nwoULtXjxYiUnJ+u+++5TfHy8/vjjD0nnE4sJEyZo//79jq19+/auHRKXvhoAAJTLzp07ZbFYNHTo\nUPn4+CgmJkZ16tTRjh07nPY7ceKERo0apRYtWshisWjgwIHy9vbW999/L0k6cuSIWrRo4dbYWGgI\nADCl8pb83cVmsyk4ONhpLCgoSKmpqU5jf/nLX5xe7927V5mZmQoODlZ2drZsNptWrlypyZMnKzAw\nUKNGjVJMTIxLsZEUAADMyUNJQVZWlvz8/JzGrFarcnJySvya77//XuPHj9f48eNVu3ZtHT16VO3a\ntdO9996rJUuW6NChQ4qPj9eNN96oqKioK46N9gEAABXIz8/PkADk5OTI39//kvt//vnnuvfeezVs\n2DCNGTNGktSoUSOtXr1aUVFR8vX1Vfv27TVgwAB9/PHHLsVGUgAAMCcPLTRs0qSJbDab05jNZlPT\npk0N+77zzjsaP368Zs6cqXHjxjnGv/rqK61YscJp39zcXPn6+pbzIDgjKQAAmJKXt7dbt7Lq0qWL\n8vLytGrVKuXn52vdunVKS0tTZGSk035ffvmlnnrqKa1YsUJ9+/Z1es/f31/Lli3T1q1bVVRUpC+/\n/FKbN2/WwIEDXTomrCkAAKAC+fr6KjExUbNmzdLChQvVuHFjJSQkyN/fXzNmzJAkzZ49W4mJicrP\nz9fo0aOdvn7x4sW6/fbb9cILL2jRokWaOnWq6tWrp2effVYtW7Z0KTYvu91ud2WCEydOaObMmdqz\nZ4+qV6+u2NhY3X///Zf9utzcXKWkpCj45//It6DkxRWe4N17jKdDKJFXYZ6nQyiVb826ng4BwDWm\n+HwQGhqqqlWrVtjnFh7+t1vn876tu1vn8wSX2gd2u13jxo1TkyZNtGvXLiUlJWnZsmXat2+fu+ID\n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\nf/8S58jIyNDvv/+upk2bOsYuPP+mpqYa3svKytLJkydLjc2lhYZZWVny8/NzGrNarcrJybns19rt\ndklSUUG+KyFcFXl5Xp4OoURFXt6eDqFEf7ohwNMhlCgvL8/TIZSI41Z+lsICT4dQoiJvu6dDKJXF\nq/L9+1b8e1Z8XqgonlpouHv3bo0cOdIw3rBhQ33yySeqV6/eZefIzs6WJKdz8IXn3+zsbFmtVsd7\nxfsVf11JXEoK/Pz8DAlATk5OqdlNsfz888nA2ZPHXAnhqsjwdADXqPXP3e/pEEr0w/ffeTqEElXm\n4/b9d5X3uOH6k5+f73Qiu9ry9r9aYZ91oYiICH3zzTcuzVF8nHJyclS9enXHfxeff61Wq3Jzcx37\nFycD1apVK3Vel5KCJk2aaPXq1U5jNptNffv2vezXVqtWTbfeeqt8fHzkVQkzVwBAxbDb7crPz7/s\nCQv/p2bNmrrhhhtks9lUp04dSc4t/eDgYKdWvs1mU2BgoOrWrVvqvC4lBV26dFFeXp5WrVqlIUOG\naMOGDUpLS1NkZORlv9ZisSggoPKWTQEAFaciKwTXi/79+2vp0qVasmSJ0tPTtXr1ak2ePNnx3syZ\nM9WrVy/Vr19fS5YsUd++fWWxlL6U0KWFhr6+vkpMTNTmzZvVsWNHrV69WgkJCWVqHwAAgPIJDw9X\ncnKyJOmRRx7RLbfcoj59+mjo0KG655571KdPH0lSdHS0Ro8erbi4OHXv3l0BAQGaMmXKZef3slf0\nyg4AAFAp8UAkAAAgiaQAAAD8D0kBAACQRFIAAAD+xyNJAU9WLL/k5GQNHjxY7dq1U8+ePfXWW295\nOqRrSlpamrp06aLt27d7OpRrwokTJxQXF6e2bdvq9ttv18qVKz0d0jVh3759GjRokNq2batevXpp\n48aNng6pUjt06JDTJewZGRl68MEH1a5dO3Xv3l1r1671YHQmZa9gOTk59m7dutnfeOMNe15enn3t\n2rX2zp0728+dO1fRoVwz0tPT7R06dLD/61//shcWFtpTUlLsHTp0sP/nP//xdGjXjDFjxtibN29u\n/+STTzwdSqVXVFRkHzhwoH3evHn2vLw8+7fffmvv0KGDfe/evZ4OrVIrKCiwd+7c2f7+++/b7Xa7\nfc+ePfbbbrvNfvToUQ9HVvkUFRXZ165da2/Xrp29Y8eOjvGHHnrIPmnSJHtOTo794MGD9o4dO9r3\n79/vwUjNp8IrBTxZsfyOHz+uqKgo9evXTxaLRS1btlSnTp20b98+T4d2TfjnP/8pPz8/1a9f39Oh\nXBMOHjyoU6dOadKkSfLx8VGzZs301ltvKSgoyNOhVWpnzpzR6dOnVVhYKLvdLi8vL/n4+Mjbu/I+\nr8RTXnrpJa1cuVLx8fGOsczMTH300UcaP368qlatqtatW6tv37567733PBip+VR4UsCTFcuvRYsW\nWrBggeN1RkaGkpOT1bx5cw9GdW2w2Wx67bXXNGvWLE+Hcs346quv1KxZMy1YsEBdu3ZVr169dPDg\nQdWqVcvToVVqtWrV0tChQzVx4kS1bNlSw4YN05NPPkkyegl33323NmzYoFatWjnGfvrpJ1WpUkWN\nGjVyjHFuqHgu3eb4SrjyZEVIZ8+eVXx8vFq2bKno6GhPh1OpFRQUaMqUKZo+fbpq1qzp6XCuGRkZ\nGdq1a5c6d+6s7du3KyUlRbGxsWrUqJHat2/v6fAqraKiIlmtVi1evFjR0dH64osv9Oijj6ply5Yk\n8Be51P33s7KyDLc65txQ8Sq8UuDKkxXN7ujRoxoyZIhq1KihZcuWXfYe1ma3fPlytWjRQlFRUZ4O\n5Zri6+urGjVqKC4uTr6+vo5Fcx9//LGnQ6vUPvzwQx06dEi9e/eWr6+vunfvru7du1P+LiM/Pz+n\np/pJnBs8ocLPKk2aNJHNZnMas9lsatq0aUWHck356quvdM899ygyMlLLly/n4SFlsGXLFm3evFnt\n27dX+/btdfz4cU2cOFErVqzwdGiVWlBQkAoLC1VY+H/Pmi/uk6Nkv/76q/Ly8pzGqlSpwpqCMmrc\nuLHy8/N1/PhxxxjnhopX4UnBhU9WzM/P17p168r8ZEWzSktLU2xsrEaOHKlp06ZRISijrVu3au/e\nvUpOTlZycrIaNGighQsXasyYMZ4OrVLr2rWrrFarli1bpoKCAu3bt0/btm1T7969PR1apRYREaEj\nR47onXfekd1u1+7duzlu5VC9enX16NFDzz//vLKzs3Xo0CFt2rRJ/fr183RoplLhZxeerFh+69at\n0+nTp5WQkKDw8HDHtmjRIk+HhuuQ1WrVqlWrdOjQIUVERGjSpEl64oknFBYW5unQKrWQkBAtWbJE\nK1euVLt27TR79mw999xzTovpULo5c+aooKBAUVFRGj9+vCZPnqw2bdp4OixT4SmJAABAErc5BgAA\n/0NSAAAAJJEUAACA/yEpAAAAkkgKAADA/5AUAAAASSQFAADgf0gKAACAJJICAADwP/8f/GNbofo2\nZKIAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x12122a0f0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Instantiate the visualizer with the Covariance ranking algorithm\n",
    "visualizer = Rank2D(features=features, algorithm='covariance')\n",
    "\n",
    "visualizer.fit(X, y)                # Fit the data to the visualizer\n",
    "visualizer.transform(X)             # Transform the data\n",
    "visualizer.show()    # Draw/show/show the data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAgUAAAG6CAYAAACY6DUwAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XtclHX+//8ng+CAgifS1TJFNDwHeEpFMbRV+5CWYWu6\nHfyGgrlpmbqapq5mmW6ah7QkrNDaTDuwpbmd/Fl9ShOPS7qdmMwyMzJQOR/m94fLfBwvQHBGZvR6\n3G+363Zr3nPxntdcmteL1+t9XZeP3W63CwAAmJ7F0wEAAADvQFIAAAAkkRQAAID/IikAAACSSAoA\nAMB/kRQAuKxxARXgPiQFV4C77rpL4eHhjq19+/aKiorSqFGj9PHHH3s6vEsqNjbW6buHh4erS5cu\nio2N1aJFi1RUVOTWz3vjjTcUHh6uwsLCCt9fuXKl+vbt69bPvFirVq1Sz549FRkZqf3791e5788/\n/6zIyEh99913hvdSU1MVGxur66+/Xvfcc0+F+5xrxowZhj+T8u2mm25y6TudLz09XdOmTXPrnICZ\n1fF0AHCPPn36aPLkyZLO/uZ05swZrV+/XklJSdq0aZM6derk4QgvneHDh2v06NGO13l5edq5c6eS\nk5Nlt9s1c+bMWotl5MiRio2NrbXPq0xWVpZWrlypUaNGKS4uTuHh4ZXu+9tvv2n8+PHKy8szvLdp\n0yY9+eSTmjx5stq2bau1a9dq7Nixevfdd1WvXr1K52zXrp0ee+wxw3jdunUv7gtVYvPmzfrhhx/c\nOidgZiQFV4iGDRsqIiLCaaxHjx7q37+/Nm7cqPnz53soskuvadOmhu/ep08fHTt2TGlpabWaFPzh\nD3/QH/7wh1r7vMqcOnVKkjR06FD16NGj0v127NihuXPnVpgQ2O12rV69WnfffbfGjx8v6ezfqQED\nBuitt97SmDFjKp03MDDQ8GcCwPvRPriCWa1WtW7dWseOHXOM7du3T3feeae6du2qfv36aeXKlSor\nK3O8X1RUpKVLl2rQoEHq3LmzbrjhBs2YMUNnzpyRJP34448KDw9Xamqq+vfvr549e+r777/Xd999\np//3//6foqKi1L17d/3lL3/R0aNHneZdtWqV/vjHP6pr16667bbbtH37dsf7u3btUnh4uPbu3av4\n+Hh16dJFgwcP1gcffHDR379+/fpOr6v73Xbs2KF77rlHXbt21Y033qhXX3210s84ePCgIiMjNWfO\nHEnG9kF4eLjS0tL0l7/8RREREerbt69WrVrlNMcPP/yghIQERUZGKjY2Vm+++aZuuukmvfHGG5V+\nblZWlmbMmKHo6GhFRERo3LhxjrL+G2+8oaFDh0qS7rnnHt11112VzpOUlKT+/ftr0aJFhveOHDmi\nY8eOaeDAgY6xoKAg9ejRQ59++mmlc1bXL7/8ogcffFDdunVTt27dNG3aNP3+++9O+7zxxhu69dZb\n1bVrV0VGRmrs2LH69ttvJZ1tU7z55ps6cOCAwsPD9eOPP1bYvvn4448d70tn221/+9vfdNddd6lr\n16567rnnJEnfffedEhISFBERoV69emnBggUqKChwzHPixAk98MAD6tWrlyOWw4cPu3wcAG9CUnAF\nKykp0U8//aSrr75akvSf//xH99xzjxo2bKiVK1dq3LhxSklJ0ZIlSxw/s3DhQm3evFkTJ05USkqK\nEhIS9M477yg5Odlp7rVr12r27Nl65JFHdO211+r++++Xj4+PVqxYoSeffFLfffedpkyZ4th/6tSp\nWrdunf785z9r1apVatu2rSZMmOCUGJTvd+utt+q5555TixYtNGXKFGVnZ1f5Pe12u0pKShxbdna2\n3n77bb311luOk2NNvtvMmTPVu3dvPffcc4qKitLcuXMdJ6Jz/fDDD0pKSlJMTIzmzZtXaXyPPfaY\nrr32Wq1Zs0Y333yzVq5cqR07dkiSCgoKdO+99yorK0tLlixRUlKSFi1apJ9//rnS+c6cOaNRo0Zp\n3759mjlzpv7+97/r999/1+jRo/Xzzz9rwIABWrZsmSRpzpw5mjt3bqVzvf3225o/f36FrYDvv/9e\nknTttdc6jV9zzTXVKtmf+2dSvpXLy8vT3Xffra+//loLFy7UggULtG/fPiUmJqq0tFSStHXrVs2a\nNUtDhw7V888/r7lz5yozM1OzZ8+WJN1///2KiYlRu3bttHHjRjVt2vSCMZV77bXXdP3112vlypUa\nOHCgfvnlF40ZM0a5ublaunSppk+fri1btmj69OmOn5k2bZp++uknLVq0SCtWrFB+fr7Gjx/v9L2A\nyx3tgytE+YlRksrKynT8+HE9++yz+u233xQfHy9JWrNmjVq2bKlVq1bJ19dXkhQQEKC//e1vSkhI\nUJMmTfT7779r5syZuuWWWyRJvXr10p49e7Rnzx6nz7v99tv1xz/+UZL066+/6vvvv9cDDzyg6Oho\nSVKTJk20Y8cOlZaW6ptvvtG//vUvLVmyRMOGDZMk9e/fXydOnNDTTz+tG2+80THvuHHjdOedd0qS\nmjdvriFDhmjXrl0aPHhwpd/9+eef1/PPP+801qhRI91555168MEHHWPV/W4jRoxQUlKSJOn666/X\ntm3b9PHHH6tt27aOfU6ePKmEhAR16NBBixcvlsVSeX4dHR3tOLnccMMNjvliYmL0z3/+U7/++qte\nffVVx0mtQYMGmjRpUqXzvf766zp+/Li2bduma665xvFdBg4cqHXr1mnWrFmONQRt27Z1ivt8Vb1X\nXkE5P2GoV6+ecnNzK/05STpw4ECF61gOHjyounXr6s0339RPP/2kf/3rX46ktWPHjho6dKi2b9+u\nQYMG6ejRo7r33nuVmJjo+Pns7GwtWrRIZWVluvbaa9W4cWNlZ2fXuFXRpEkTTZ061fF68eLF8vHx\nUXJysqPC1KJFC9177706fPiwOnTooL179+ovf/mL4+9ry5Yt9frrrysvL0/BwcE1+nzAW5EUXCHe\nffddvfvuu05jjRs31vz589WlSxdJ0u7duxUXF+eUQPTr10/FxcXau3evbrrpJq1YsULS2dXomZmZ\n+uabb/Tdd9+pUaNGTnOHhoY6/rtJkyZq3bq1Hn30Ue3cuVM33nij+vbt6/iHes+ePfLx8dGQIUOc\n5rj55ps1Z84cx8lHOnsSLlfem8/Pz6/yu992220aM2aM7Ha7Pv30Uz3zzDMaN26c7rvvPqf9qvvd\nzo0hMDBQwcHBhp77hAkTdOTIET377LPy9/evMr5z5/Px8VGzZs0c8+3atUtdunRx+i130KBBqlOn\n8v819+zZo86dOzsSAulsWb9fv36GBMcV5W0lHx8fw3sVjZ3ruuuu0+OPP24YLz9Wu3fvVrt27dSs\nWTPH38VrrrlG1157rXbu3KlBgwY5koHs7Gx99913yszM1Pbt2x1/fy903KvSunVrp9e7d+9Wt27d\nZLVaHfGUv961a5c6dOig7t27a+XKlfr6668VGxurmJgYPfzwwxcdA+CNSAquENHR0Y7fii0Wi4KD\ng3XNNdc4/eOdnZ2tl156SS+99JLh50+cOCHp7CVe5eXyhg0bqnPnzrJarYZrwRs3buz4b4vFohde\neEErV67Utm3btGnTJtWvX1/jx49XYmKicnJyFBQUZPhHvEmTJpLk9FvnuavTy3/7PnfNQ0VCQkIc\niU/Xrl1lt9u1ePFiNWvWTHFxcY79qvvdzl8hb7FYDPuUlpaqWbNmWr58uZYvX15lfFXNl52d7XQs\nJcnX19eQqJzr1KlTjmN3rsaNGysjI6PKWGoiKChI0tlSf2BgoGM8NzfXsF7jfAEBAY4/k4pkZ2fr\n0KFDFVYT2rdvL+nsmoNHHnlEn376qaxWq8LDwx0xuXpvgvOPX3Z2tg4ePFhhPOX/byxbtkyrVq3S\n1q1b9c4776hu3br605/+pJkzZ1ZZKQIuJyQFV4jg4OAq/xGWzv4jHxcXp1tvvdXwXosWLXT69GlN\nmDBB0dHRWrt2raOs++CDDzotVqxIixYt9MQTT2jBggXau3evNmzYoKVLl6pnz55q0KCBTp8+raKi\nIqfEICsrS9LZcrk7jR8/Xlu2bNGCBQvUr18/x+df7HeryHPPPee4Rv6zzz5Tnz59LirWpk2bOnr3\n5ex2e5XrKIKDgx0nqnP99ttvbj2WrVq1kiQdPXpUISEhjvEff/zRqVJ0MYKDgxUZGalZs2YZ3iv/\nDuULD998802Fh4fL19dXr7zySpWLHH18fBxrEspVdGXF+YKCgjR48GCNGzfO8F75d2/YsKFmz56t\nWbNm6d///rdef/11paam6vrrr3dKPoHLGemtiURGRur7779Xly5dHFudOnX09NNP67ffflNmZqZO\nnTqlsWPHOk6aBQUF2rt3b5W/rWdmZio6Olpffvml6tSpo549ezpW4x8/flxRUVGy2+3atm2b08+9\n++676tChg6xWq1u/p5+fn/76178qOztbzz77rCPGi/lulWnSpImGDRumqKgoLViwQMXFxRcVa1RU\nlDIyMpxO8p988kmV85X/TPlqeuls///TTz9162WAoaGhatasmT766CPH2OnTp7V792716tXLpbkj\nIyN15MgRhYaGOv4utmvXTitXrtS///1vSdL+/fs1bNgwdezY0bEG5rPPPpP0f9Wj839DDwwM1KlT\np5wSgeq0VKKiopSZmamOHTs64mnWrJmWLl2q77//XqdPn1ZsbKzef/99+fj4qGvXrpo3b56sVquO\nHz/u0rEAvAmVAhNJSkrSmDFjNHPmTN18883KycnRsmXLFBAQoNDQUOXn5yswMFDLly/Xfffdp9On\nT2vdunU6ceKEo2xbkdatWys4OFgzZszQAw88oPr16+uVV15RUFCQevXqpcaNG2vQoEGaN2+esrOz\nFRoaqnfeeUe7du0yXJ7nLjExMerVq5c2bNigMWPGKDQ09KK+24XMnj1b8fHxeuGFFxzX8tfE8OHD\ntWbNGiUlJen+++/XmTNn9NRTT0kynvDK3X777UpNTdV9992nyZMny9/fX2vXrlVZWZnuueeei/4u\n5/Px8VFCQoIWLVqkwMBAhYeHa+3atapfv76GDx/u0ty33367XnrpJSUkJOi+++6Tv7+/1q1bp4MH\nD2rGjBmSpM6dO+u1115T69atFRAQoH/+85+OS1Tz8/MVEBCg4OBg/fDDD/r8888VGRmp6OhoPfnk\nk3r00Uc1cuRI7du3T1u3br1gPPfcc4/efPNNTZw4UaNGjVJJSYlWrVqlrKwstW/fXkFBQQoNDdXj\njz+u/Px8NW3aVFu3blVpaakGDBjg0rEAvAmVAhOJiIhQSkqKbDabJk6cqIULFyoqKkrr1q2Tn5+f\ngoODtXz5cp04ccJxaVx4eLgeffRRff/995WWtC0Wi5599lm1bNlSjz76qCZMmKDs7GytW7fO0S9/\n6qmndMcdd2jt2rWaOHGivvvuO61Zs0aDBg26ZN93+vTpKi4u1rJlyy76u11Ip06ddPvtt2vNmjVV\nXkZYGX9/f6WkpCg4OFhTpkzRihUrHFcqBAQEVPgzQUFBWr9+vcLDwzV79mz99a9/VaNGjbRx40ZH\nFcRd7r77bk2ePFmvvPKKHn74YVmtVq1bt+6CawouJDg4WOvXr9dVV12lGTNmOC5ffemll9SmTRtJ\n0hNPPKEWLVpo+vTpmj59unJycpSSkiJJjts233HHHY71K4cOHdJ1112n+fPna9++fRo/frzS09Od\nLrmtTMuWLbVhwwYVFRXpwQcf1COPPKLmzZsrNTXVsb5j8eLF6tGjh5588kmNGzdOGRkZWr16dZVX\ncACXGx87TxMBPOarr77SsWPHnC7LtNlsGjJkiNLS0hyL7gCgNtA+ADwoOztbEyZM0AMPPKAePXro\n999/17PPPquIiIgqn1cAAJdCjdoHBw8edNycRpJycnI0ceJEdevWTQMGDNCmTZvcHiBwJSu/ne67\n776rhIQEzZs3T+3bt9dzzz13wXsBALi8nX9OPd8777yjgQMHKiIiQomJiY4rtiTp0KFDio+PV0RE\nhIYPH37BJ6FWV7XaB3a7Xa+//roWLVokX19f7dq1S5I0adIk1a1bV4899pi++uorjRs3Ts899xwP\n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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x120600a90>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Instantiate the visualizer with the Pearson ranking algorithm\n",
    "visualizer = Rank2D(features=features, algorithm='pearson')\n",
    "\n",
    "visualizer.fit(X, y)                # Fit the data to the visualizer\n",
    "visualizer.transform(X)             # Transform the data\n",
    "visualizer.show()                   # Draw/show/show the data"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**RadViz**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "# Load the classification data set\n",
    "data = wine\n",
    "\n",
    "# Specify the features of interest and the classes of the target\n",
    "features = [\n",
    "        'fixed acidity', 'volatile acidity', 'citric acid', 'residual sugar', 'chlorides', 'free sulfur dioxide',\n",
    "        'density', 'pH', 'sulphates', 'alcohol'\n",
    "    ]\n",
    "classes = ['low','high']\n",
    "\n",
    "# Extract the numpy arrays from the data frame\n",
    "X = data[features].as_matrix()\n",
    "y = data.qualitybin.as_matrix()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array(['low', 'low', 'low', ..., 'low', 'high', 'low'], dtype=object)"
      ]
     },
     "execution_count": 74,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 75,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "ename": "TypeError",
     "evalue": "list indices must be integers or slices, not str",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mTypeError\u001b[0m                                 Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-75-2a8bc7586859>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m      2\u001b[0m \u001b[0mvisualizer\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mRadViz\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mclasses\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mclasses\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfeatures\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mfeatures\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      3\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 4\u001b[0;31m \u001b[0mvisualizer\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfit\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mX\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m)\u001b[0m      \u001b[0;31m# Fit the data to the visualizer\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      5\u001b[0m \u001b[0mvisualizer\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtransform\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mX\u001b[0m\u001b[0;34m)\u001b[0m   \u001b[0;31m# Transform the data\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      6\u001b[0m \u001b[0mvisualizer\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mshow\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m         \u001b[0;31m# Draw/show/show the data\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/Users/tuulimorrill/anaconda3/lib/python3.6/site-packages/yellowbrick/features/base.py\u001b[0m in \u001b[0;36mfit\u001b[0;34m(self, X, y, **kwargs)\u001b[0m\n\u001b[1;32m    182\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    183\u001b[0m         \u001b[0;31m# Draw the instances\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 184\u001b[0;31m         \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdraw\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mX\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    185\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    186\u001b[0m         \u001b[0;31m# Fit always returns self.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/Users/tuulimorrill/anaconda3/lib/python3.6/site-packages/yellowbrick/features/radviz.py\u001b[0m in \u001b[0;36mdraw\u001b[0;34m(self, X, y, **kwargs)\u001b[0m\n\u001b[1;32m    181\u001b[0m             \u001b[0mrow_\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrepeat\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mexpand_dims\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrow\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    182\u001b[0m             \u001b[0mxy\u001b[0m   \u001b[0;34m=\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0ms\u001b[0m \u001b[0;34m*\u001b[0m \u001b[0mrow_\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msum\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0maxis\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m/\u001b[0m \u001b[0mrow\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msum\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 183\u001b[0;31m             \u001b[0mkls\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mclasses_\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0my\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    184\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    185\u001b[0m             \u001b[0mto_plot\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mkls\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mxy\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;31mTypeError\u001b[0m: list indices must be integers or slices, not str"
     ]
    }
   ],
   "source": [
    "# Instantiate the visualizer\n",
    "visualizer = RadViz(classes=classes, features=features)\n",
    "\n",
    "visualizer.fit(X, y)      # Fit the data to the visualizer\n",
    "visualizer.transform(X)   # Transform the data\n",
    "visualizer.show()         # Draw/show/show the data"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Parallel Coordinates**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "ename": "TypeError",
     "evalue": "list indices must be integers or slices, not str",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mTypeError\u001b[0m                                 Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-52-4fa6ca6340e5>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m      2\u001b[0m \u001b[0mvisualizer\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mParallelCoordinates\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mclasses\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mclasses\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfeatures\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mfeatures\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      3\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 4\u001b[0;31m \u001b[0mvisualizer\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfit\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mX\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m)\u001b[0m      \u001b[0;31m# Fit the data to the visualizer\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      5\u001b[0m \u001b[0mvisualizer\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtransform\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mX\u001b[0m\u001b[0;34m)\u001b[0m   \u001b[0;31m# Transform the data\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      6\u001b[0m \u001b[0mvisualizer\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mshow\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m         \u001b[0;31m# Draw/show/show the data\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/Users/tuulimorrill/anaconda3/lib/python3.6/site-packages/yellowbrick/features/base.py\u001b[0m in \u001b[0;36mfit\u001b[0;34m(self, X, y, **kwargs)\u001b[0m\n\u001b[1;32m    182\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    183\u001b[0m         \u001b[0;31m# Draw the instances\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 184\u001b[0;31m         \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdraw\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mX\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    185\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    186\u001b[0m         \u001b[0;31m# Fit always returns self.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/Users/tuulimorrill/anaconda3/lib/python3.6/site-packages/yellowbrick/features/pcoords.py\u001b[0m in \u001b[0;36mdraw\u001b[0;34m(self, X, y, **kwargs)\u001b[0m\n\u001b[1;32m    175\u001b[0m             \u001b[0;31m# TODO: How to map classmap to labels?\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    176\u001b[0m             \u001b[0mlabel\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0midx\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;31m# Get the label for the row\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 177\u001b[0;31m             \u001b[0mlabel\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mclasses_\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mlabel\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    178\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    179\u001b[0m             \u001b[0;32mif\u001b[0m \u001b[0mlabel\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mused_legends\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;31mTypeError\u001b[0m: list indices must be integers or slices, not str"
     ]
    }
   ],
   "source": [
    "# Instantiate the visualizer\n",
    "visualizer = ParallelCoordinates(classes=classes, features=features)\n",
    "\n",
    "visualizer.fit(X, y)      # Fit the data to the visualizer\n",
    "visualizer.transform(X)   # Transform the data\n",
    "visualizer.show()         # Draw/show/show the data"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Regressor Evaluation**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Regression Evaluation Imports\n",
    "\n",
    "from sklearn.linear_model import Ridge, Lasso\n",
    "from sklearn.model_selection import train_test_split\n",
    "\n",
    "from yellowbrick.regressor import PredictionError, ResidualsPlot"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Load the data\n",
    "df = wine\n",
    "feature_names = [\n",
    "        'fixed acidity', 'volatile acidity', 'citric acid', 'residual sugar', 'chlorides', 'free sulfur dioxide',\n",
    "        'density', 'pH', 'sulphates', 'alcohol'\n",
    "    ]\n",
    "\n",
    "target_name = 'quality'\n",
    "\n",
    "# Get the X and y data from the DataFrame\n",
    "X = df[feature_names].as_matrix()\n",
    "y = df[target_name].as_matrix()\n",
    "\n",
    "# Create the train and test data\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\nNwZ1y5922mnk5uYybNiwQFn79OnD008/HXRPCCFaR1r4hOiBBg8ezGWXXcbKlSvZvn07Y8eO5fbb\nb2fhwoXYbDYmT57M4cOH+dOf/sTw4cPp1asXFosFRVFYsGBBoBXmpZdeIiUlhaFDhwalLQG4/fbb\nufXWW3nssceYOnUqn3/+Obt37w5qBZo0aRL/+te/GDJkCDabjWXLlgXlBBwxYgRvv/02L730EmPG\njGH37t0sWbIERVFwOp31rmvEiBGNlrE5brrpJt5//31mzZrFLbfcgsfj4S9/+Qt9+vRpdrdwU0LV\nf12XX345y5cv55ZbbmHBggUUFRUFZjrXuu2225gzZw6///3vOeecc1i/fj2ff/55IJdgQkICV199\nNY8++ihFRUUMGTKEzZs388ILLwQlgm6MoihMnz6d1157jTPPPBOHw1Fvn/j4eK655hqWLl2KqqqM\nGTOGdevWsXLlSh544AH0ej2TJk1i7Nix3Hnnndx77734/X7+/Oc/ByWavvHGG3n//feZP38+V199\nNT6fjyVLllBUVMSpp57a0ioWQpxEWviE6KHuuusuLBYLTz31FAAXXHABTz/9NBs2bGDOnDk899xz\nXHTRRTz33HNATZfbyy+/jMFg4O677+auu+7CZrOxfPnykCtETJkyhaeffppvvvmG+fPnU1hYWG/M\n2uLFixk7diyLFy/mkUce4eKLLw7K8XbllVdy88038+qrr3Lrrbfy/vvv88ADD3DWWWexY8eOeu/Z\n0jKG0q9fP9544w3sdjv33HMPjz32GCNGjOCtt94KmUKltU6u/7qsViuvvvoqSUlJ3HPPPSxfvpxH\nH300aJ9JkybxxBNPsHbtWm677TZ2797N3Llzg8blPfDAA9x44428+uqrzJkzh48//phFixYxd+7c\nZpfzvPPOw+v1Bk0aOdl9993H/Pnzeffdd5k7dy4bNmzgiSee4IYbbgBAp9Px4osvctppp/Hggw/y\n1FNPsWDBgqCu5v79+/OPf/wDj8fDXXfdxQMPPEDfvn157bXX6o3/E0K0nKKFGvkshBAion355Zek\npqYGLWX39NNPs27dOj744INOLJkQIhJJl64QQnRBq1atYtOmTdxzzz306tWLXbt28eqrrzaY208I\n0bNJC58QQnRBFRUVPPnkk6xZs4aysjL69+/P9ddfz69+9avOLpoQIgJJwCeEEEII0c3JpA0hhBBC\n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\nERH5OAZ8RERERD6OAR8RERGRj5N3dwPaSxRFAIAgCB1+b8c9BUGARCLp8Pv3FoIbReMAAA5eSURB\nVOzH9mMfdgz2Y/uxDzsG+7H92IeuHP3hiItuJBHdXekh6urqcPbs2e5uBhEREVG3S0lJQUBAQLPy\nHh/w2e12GAwGKBQKRvhERETUK4miCIvFAj8/P0ilzVfs9fiAj4iIiIhax00bRERERD6OAR8RERGR\nj2PAR0REROTjGPARERER+TgGfEREREQ+jgEfERERkY9jwNdERUUFRo4ciV27drV4/bvvvsOECRMw\nePBgzJ07FxUVFV3cQu/XVh/OnTsXAwcORGZmpvMPXbdmzRoMGDDApX+OHDnSrB7Honue9iHHYuvK\ny8sxd+5cDBkyBGPGjMG6detarMex6J6nfcix6N63337r0i+ZmZno378/li5d2qwux2IbRHJ6+umn\nxf79+4s7d+5sdu3UqVPikCFDxGPHjolGo1FcvHixOGfOnG5opXdrrQ9FURTvuusu8cSJE13cqp7j\npZdeElevXt1qHY7F1nnSh6LIsdgau90uTp8+Xfzv//5vURAE8ezZs+Idd9whHj161KUex6J7nvah\nKHIs3owffvhBHDVqlFhWVuZSzrHYNs7wXbNhwwZoNBpERUW1eP1///d/MWHCBAwaNAhqtRrz58/H\n3r17+RtEE231oV6vR2VlJVJSUrq4ZT3HqVOnkJaW1modjsXWedKHHIutO378OK5evYr58+dDoVAg\nOTkZn3/+OeLj413qcSy652kfcix6zmAw4OWXX8Zrr72GyMhIl2sci21jwAfg3Llz+Oijj/Daa6+5\nrVNcXIykpCTn34ODgxEUFIRz5851QQu9nyd9ePLkSfj5+WHu3LkYMWIEHnnkEeTm5nZdI72c0WjE\nuXPnsG7dOowaNQr33XcfNm3a1Kwex6J7nvYhx2Lr8vPzkZycjLfeegujRo3Cvffei+PHjyM4ONil\nHseie572Icei51avXo2UlBRMnDix2TWOxbbJu7sB3c1qtWLBggVYsmQJdDqd23pGoxFqtdqlTKPR\nwGg0dnYTvZ6nfWg2mzF48GD813/9F+Li4rBp0yY89dRT2Lp1K8LDw7uwxd6poqICQ4cOxYwZM/CX\nv/wFJ06cwLx58xAeHo6xY8c663EsuudpH3Istq6mpgY5OTkYMWIEdu3ahby8PMyZMwexsbEYNmyY\n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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1208dae48>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Instantiate the linear model and visualizer\n",
    "ridge = Ridge()\n",
    "visualizer = ResidualsPlot(ridge)\n",
    "\n",
    "visualizer.fit(X_train, y_train)  # Fit the training data to the visualizer\n",
    "visualizer.score(X_test, y_test)  # Evaluate the model on the test data\n",
    "g = visualizer.show()             # Draw/show/show the data"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Prediction Error Plot**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Load the data\n",
    "df = wine\n",
    "feature_names = [\n",
    "        'fixed acidity', 'volatile acidity', 'citric acid', 'residual sugar', 'chlorides', 'free sulfur dioxide',\n",
    "        'density', 'pH', 'sulphates', 'alcohol'\n",
    "    ]\n",
    "\n",
    "target_name = 'quality'\n",
    "\n",
    "# Get the X and y data from the DataFrame\n",
    "X = df[feature_names].as_matrix()\n",
    "y = df[target_name].as_matrix()\n",
    "\n",
    "# Create the train and test data\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAooAAAHMCAYAAABSnYlgAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3X1YVHX+//EXIPeoYXapbYqkiAgqIHmHaYvm3dfNTN3U\nMitN0EqjrDSVDDNq3byLzVYjN9RNy9rMLMvMbOOLbGhKgK2R5Ndu/BmZGAozCPP7w6upiSMOeJiJ\neD6uay6ccz7nc97nDdGLc87MeNhsNpsAAACAX/F0dwEAAAD4bSIoAgAAwBBBEQAAAIYIigAAADBE\nUAQAAIAhgiIAAAAMERQB1DB58mSFh4fbH127dlVsbKwmTJigDz/8sEH2+cwzzyg+Pt7+PDw8XC+9\n9JJT23777be6/fbbZbFYJEk5OTkKDw/XF1980SC1/mTu3LkOffr145VXXmnQ/dfGZrMpJSVFMTEx\nuuaaa3T8+HHT5p48ebKSk5NNmw/Ab1czdxcA4Lepf//+mj17tqTzoaOsrEzr169XUlKSXnnlFUVG\nRjbo/jdv3qz27ds7NTY7O1vZ2dn255GRkdq8ebOuuuqqhirPLiwsTI8//rjhug4dOjT4/i8kLy9P\nmzdv1r333qvevXurTZs2bqsFQONFUARg6LLLLlN0dLTDsmuuuUYDBw7U5s2blZqa2qD7//W+6yIo\nKOiStq+LgIAAl+2rLk6fPi1JGj16tNOBGwB+jUvPAJzm5+enjh076ptvvpF0/tLr7Nmzde+996pn\nz55KSUmRJP2///f/dN9996lXr17q1auXHnzwQf3www8Oc73yyisaMmSIevbsqQceeEAVFRUO6399\n6Tk/P1+33367YmJidO211+qpp56S1WrVa6+9pnnz5kmSevTooddee83w0vNbb72lMWPGqGfPnho8\neLDWrl2rX34wVXh4uLZu3ap77rlH0dHRio+PV3p6uil9e+aZZzRx4kQ9+uijiomJ0V133WWvcdOm\nTerXr58GDBigsrIyWa1Wpaena+jQoerRo4fGjBmj3bt32+e60Ha/3t+0adMkSUOGDNHcuXMlSSUl\nJZo7d64GDBig6Oho3XXXXQ49MqqzvoqKinT33Xerd+/eioqK0rBhwxwuxZ87d05PPvmkBg4cqO7d\nu+uGG27QW2+9ZV9/5swZzZs3T/Hx8erRo4cmTJjgcNZYuvj3FMCl44wiAKedO3dOX3/9tSIiIuzL\n3nvvPd1www169tlnFRgYqLNnz+q2226Tl5eXlixZourqai1btkyJiYl66aWX5OXlpbfeeksLFy7U\nHXfcoX79+mnr1q36xz/+ocsuu8xwv1999ZUmT56snj17atmyZTp58qTS0tJUXV2txMREzZgxQ6tX\nr9aGDRvUqVMnff755w7bb9iwQY8//rimTJmiBx54QAcOHNDKlSv1ww8/6KGHHrKPe/zxxzV+/Hit\nXr1a77//vp555hl1795dgwYNumhffs3Dw0NeXl7253l5eQoKCtKzzz7rMO4f//iHnnzySZ09e1ZB\nQUGaNWuWPvroI913333q2LGjtm3bZj++P/7xjxfc7pfGjx+v5s2bKy0tTenp6QoPD1dZWZkmTJgg\nLy8vzZs3T76+vnruuec0adIkvf7662rXrl2tddZFWVmZbrvtNnXr1k1//etfJUkvvfSSFi5cqLi4\nOIWGhurvf/+7/vWvf+mRRx5R27ZttW3bNt1///0KCwtTWFiYlixZoo8//lgpKSlq0aKFMjMzNWPG\nDL3//vtq1aqV099TAJeGoAjAkM1msweg6upqHT9+XM8995y+//57jRs3zmHso48+Kj8/P0nSxo0b\n9fXXX+udd97RH/7wB0lSt27dNGLECO3evVtDhgzR2rVrNXToUD388MOSpIEDB+rw4cM6efKkYS2Z\nmZkKDAzUmjVr5OPjI0k6e/as3nrrLbVq1cp+L2CPHj3k6+vrsG1VVZWeeeYZjRs3zn7mccCAAfLw\n8NDq1as1bdo0tWrVyr78p5DRt29f7dixQx9++GGtQfHgwYOG92v6+Pjo008/tT8/d+6c5s+fr44d\nO0o6f2ZQku688077/J999pneeecdLV26VDfccIO9NydOnNCKFSscguIvt/u1tm3b6uqrr5YkRURE\n6KqrrtKLL76o48ePa8eOHfZ7N/v06aPBgwfrhRde0Pz58w3rrI/i4mKFhoZq+fLlat68uSSpZ8+e\n6t27t/bv36/Q0FDt379fUVFRGj16tKTztzU0b95cVVVVkqT9+/erf//+GjZsmKTzP0PPPfecysvL\n6/Q9BXBpCIoADL399tt6++23HZa1atVKqamp6t69u31Z27Zt7SFRkj7++GOFhYWpTZs29qB51VVX\nqUOHDtq7d6/i4+N16NAh3XLLLQ5zDxkyRC+//LJhLZ988on69etnD4nS+VfeTp48+aLHceTIEZ06\n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\nERQBAABgiKAIAAAAQwRFAAAAGCIoAgAAwBBBEQAAAIYIigAAADBEUAQAAIAhgiIAAAAMERQBAABg\niKAIAAAAQy4NisePH1diYqJiY2M1cOBAZWZmGo5LTExUjx49FBMTY3/8pLCwUOPGjVN0dLRGjx6t\nAwcOuKp8AACAJsVlQdFms2nmzJm6+uqrlZOTo4yMDKWnp2v//v01xhYWFmrjxo365JNP7A9Jslgs\nSkpK0k033aSPP/5YkydP1owZM3TmzBlXHQYAAECT4bKgePDgQZ04cUJz5syRt7e3wsLCtGnTJoWG\nhjqM+/7773Xy5El16dKlxhx79+6Vp6enJk2aJG9vb40bN06tW7fWnj17XHUYAAAATUYzV+2ooKBA\nYWFhWrp0qbZt26agoCAlJSVpzJgxDuMKCwsVGBioxMREffbZZ+rYsaMefvhhxcTEqLi4WJ06dXIY\nHxoaqiNHjtSpFqvVqoqKiks+pqbKYrE4fEX90Uvz0Evz0Evz0Evz0EvzWK1Wp8e6LCiWlpYqJydH\nffv21e7du5Wfn69p06apffv2iouLs4+zWCyKjo7Wgw8+qJCQEG3ZskV33XWX3n77bZ09e1b+/v4O\n8/r5+dU59B09etSUY2rqioqK3F3C7wa9NA+9NA+9NA+9NA+9dC2XBUUfHx+1bNlSiYmJkqTY2FgN\nGzZMu3btcgiKQ4YM0ZAhQ+zPJ02apJdeekk5OTny9/evEQorKioUEBBQp1pCQkIUFBR0CUfTtFks\nFhUVFalz587y9fV1dzmNGr00D700D700D700D700T1lZmdMnzVwWFENDQ1VVVaWqqip5eXlJkqqq\nqmSz2RzG7dixQ9XV1Ro5cqR9mcVika+vr66++mpt2LDBYXxxcbFGjRpVp1p8fHzk5+dXzyPBT3x9\nfemjSeileeileeileeileejlpavLpWeXvZglPj5efn5+Sk9P17lz57R//37t3LlTw4cPdxh39uxZ\nLVmyREVFRaqsrNTzzz+viooKxcfHq1+/frJarVq/fr0qKyu1ZcsWlZSUaMCAAa46DAAAgCbDZWcU\n/fz8tH79eqWmpqp///4KCgrSggULFB0drZSUFElSamqqbrrpJn333XeaNm2aTp06pW7dumnt2rX2\ny8tr167VokWLtGzZMoWEhGj16tV1vvQMAACAi3NZUJTO3xuYkZFRY3lqaqrD88TERPu9jL/WtWtX\nbdq0qUHqAwAAwM/4CD8AAAAYIigCAADAEEERAAAAhgiKAAAAMERQBAAAgCGCIgAAAAwRFAEAAGCI\noAgAAABDBEUAAAAYIigCAADAEEERAAAAhgiKAAAAMERQBAAAgCGCIgAAAAwRFAEAAGCIoAgAAABD\nBEUAAAAYIigCAADAEEERAAAAhgiKAAAAMERQBAAAgCGCIgAAAAwRFAEAAGCIoAgAAABDBEUAAAAY\nIigCAADAEEERAAAAhgiKAAAAMERQBAAAgCGCIgAAAAwRFAEAAGCIoAgAAABDBEUAAAAYIigCAADA\nEEERAAAAhgiKAAAAMERQBAAAgCGCIgAAAAy5NCgeP35ciYmJio2N1cCBA5WZmWk47uWXX9bQoUMV\nGxursWPHKjc3174uIyNDUVFRiomJsT9+uR4AAADmaOaqHdlsNs2cOVN9+vRRenq6vvzyS91yyy2K\niopSbGysfdzevXu1bNkyrVu3TuHh4dq6dauSkpK0c+dOBQcHq7CwUMnJyZo6daqrSgcAAGiSXHZG\n8eDBgzpx4oTmzJkjb29vhYWFadOmTQoNDXUYd/z4cU2dOlURERHy9PTUmDFj5OXlpaKiIknSoUOH\nFBER4aqyAQAAmiyXBcWCggKFhYVp6dKlio+P17Bhw3Tw4EEFBwc7jLvxxht111132Z/v27dPZ86c\nUadOnVReXq7i4mJlZmYqPj5eI0aM0JYtW1x1CAAAAE2Kyy49l5aWKicnR3379tXu3buVn5+vadOm\nqX379oqLizPcpqioSLNmzdKsWbPUqlUrHTt2TL169dLEiRO1atUq5eXlKSkpSVdccYUGDRrkdC1W\nq1UVFRVmHVqTY7FYHL6i/uileeileeileeileeileaxWq9NjPWw2m60Ba7F7/vnnlZGRoezsbPuy\nefPm6bLLLtPDDz9cY/xHH32k5ORk3XHHHZo5c+YF5128eLEqKyuVmpp60RosFovy8/PrdwAAAAC/\nI1FRUfL19a11jMvOKIaGhqqqqkpVVVXy8vKSJFVVVckop7766qtasmSJUlNTNWrUKPvygoICZWVl\nafr06fZlFotFfn5+daolJCREQUFB9TwSWCwWFRUVqXPnzhf9AUPt6KV56KV56KV56KV56KV5ysrK\ndPToUafGuiwoxsfHy8/PT+np6br77ruVl5ennTt3at26dQ7jsrOz9dhjj+mFF16ocUk6ICBA6enp\n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\niuV9FOvgYn/98tex8+ileeileeileeil+9V66blr167y8PBwaqJDhw6ZVlRD4dKzOd47dEzbcwv1\nP3Hd+GSWS8QnDZiHXpqHXpqHXpqHXprHtHsU//Of/9j/nZ+frxdeeEEzZ85U9+7d5e3trfz8fP3t\nb3/T7bffrilTpph3BA2EoGiOiooKFRQUKDIyUn5+fu4up1Gjl+ahl+ahl+ahl+ahl+Yx7R7F3r17\n2/+9aNEipaWl6dprr7Uv69q1q/7whz9o4cKFjSIoAgAAwHlOf4Tft99+q7Zta771ScuWLXXy5ElT\niwIAAID7OR0U+/Xrp9TUVB07dsy+7PPPP9ejjz6qP/7xjw1SHAAAANzH6U9mefzxx3XPPffo+uuv\nV0BAgGw2myoqKjRgwAA99thjDVkjAAAA3MDpoNiqVSv985//VFFRkYqKiuTh4aEuXbooNDS0IesD\nAACAmzh96Vk6/76Khw4d0uHDh9WnTx+dOHFCJSUlDVUbAAAA3MjpM4rHjh3TlClTVFVVpZKSEo0Z\nM0YbN25UTk6O1q1bp27dujVknQAAAHAxp88oLlmyRAMGDNDu3bvl43P+0zmWLVum6667TmlpaQ1W\nIAAAANzD6aC4b98+3X777fL0/HmTZs2aacaMGcrPz2+Q4gAAAOA+TgdFHx8fnT59usbyr776SoGB\ngaYWBQAAAPdzOijecMMNWrx4sf3sYWlpqfbs2aOUlBSNGjWqwQoEAACAezgdFB944AH16dNHkyZN\nUnl5ucaNG6e7775bgwcP1v333+/UHBkZGYqKilJMTIz9kZub6zAmJSXFYX10dLTCw8O1bds2p+cA\nAADApXP6Vc+ffvqp7rvvPs2ePVv/93//p6qqKnXo0EEBAQFO76ywsFDJycmaOnXqBcekpqYqNTXV\n/nzlypXKzc3V8OHDnZ4DAAAAl87pM4ozZszQF198IV9fX4WFhalr1651ComSdOjQIUVERDg9Pj8/\nX+vXr9df/vIXeXt712sOAAAA1I/TZxSvuuoqFRcX1zuklZeXq7i4WJmZmXrwwQfVokULTZ06VePG\njbvgNmlpaZo+fbratWtX7zmMWK1WVVRU1Os4IFksFoevqD96aR56aR56aR56aR56aR6r1er0WKeD\nYqdOnTRnzhw999xzat++vfz8/BzWP/3007VuX1JSol69emnixIlatWqV8vLylJSUpCuuuEKDBg2q\n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\nSlksFjdX03hZrVb7Vw8PDzdX07jRS/PQS/PQS/PQS/PQS/NUVlZK+jkX1cbD5syo34kff/xRhw8f\ndncZAAAAbtelSxc1b9681jFNKihWV1frzJkz8vb25q8RAADQJNlsNlVWViowMFCenrXfhdikgiIA\nAACcx4tZAAAAYIigCAAAAEMERQAAABgiKAIAAMAQQREAAACGCIoAAAAw1CSCYm5ursaPH69evXpp\nyJAh2rRpk7tLarTeeustjRgxQjExMfqf//kfvffee+4uqdErKSlRv379tHv3bneX0mhlZGQoKipK\nMTEx9kdubq67y2qUjh8/rsTERMXGxmrgwIHKzMx0d0mN0htvvOHw8xgTE6OuXbtq4cKF7i6tUdq/\nf79uuukmxcbGatiwYdq2bZu7S2q0srOzdeONNyomJkY333yzDh48WPsGtt+5U6dO2a655hrbG2+8\nYauqqrLl5+fbrrnmGltWVpa7S2t0jhw5YuvZs6dt3759NpvNZsvKyrJFRkbavv/+ezdX1rhNnz7d\n1rVrV9v777/v7lIarfvvv9/2/PPPu7uMRq+6uto2ZswY25NPPmmzWq22w4cP26655hr7f/Oov6ys\nLFt8fLzt22+/dXcpjc65c+dsffv2tb399ts2m81m+/jjj23dunWzHTt2zM2VNT7Hjh2z9ezZ07Z5\n82ZbZWWlbffu3bbevXvbTpw4ccFtfvdnFL/55hsNGjRIf/rTn+Tp6anIyEj16dNH+/fvd3dpjU5o\naKiysrIUGxurc+fOqaSkRIGBgfLx8XF3aY3WSy+9JH9/f7Vr187dpTRqhw4dUkREhLvLaPQOHjyo\nEydOaM6cOfL29lZYWJg2bdqk0NBQd5fWqJ05c0Zz587VokWL1LZtW3eX0+icPn1aJ0+eVFVVlWw2\nmzw8POTt7S0vLy93l9bofPjhh+rSpYv+/Oc/q1mzZrruuuvUo0cP7dix44Lb/O6DYkREhJYuXWp/\nXlpaqtzcXHXt2tWNVTVegYGBOnbsmHr06KGHHnpIycnJCgoKcndZjVJxcbHWrVunRYsWubuURq28\nvFzFxcXKzMxUfHy8RowYoS1btri7rEapoKBAYWFhWrp0qeLj4zVs2DAdPHhQwcHB7i6tUXv++efV\npUsXDRkyxN2lNErBwcGaNGmS7r//fkVGRuqWW27RwoUL+QO7Hqqrq+Xn5+ewzNPTU0ePHr3gNr/7\noPhLP/74o5KSkhQZGamEhAR3l9NotWvXTgcPHtS6dev01FNPKTs7290lNTrnzp3TQw89pPnz5+uy\nyy5zdzmNWklJiXr16qWJEydq9+7dWrx4sZ588knt2bPH3aU1OqWlpcrJyVFwcLB2796ttLQ0LV68\nmPs9L8GZM2e0YcMG3XPPPe4updH6KdysXLlSBw4c0HPPPacnnnhCn332mbtLa3QGDBigvLw87dix\nQ5WVlfrwww+VnZ0ti8VywW2aTFA8duyYJkyYoJYtWyo9Pf2iH4KNC2vWrJm8vb3Vr18/DR06VLt2\n7XJ3SY3Os88+q4iICA0aNMjdpTR67du314YNGzRo0CD5+PgoLi5Oo0eP5ueyHnx8fNSyZUslJibK\nx8fH/sIBell/7733nq688kpFR0e7u5RG691331VeXp6GDx8uHx8fXXfddbruuuv0+uuvu7u0Rqdj\nx45asWKFnn32WQ0YMEBbt27V8OHD1bx58wtu0yTSUkFBgf785z9rwIABevbZZ2ucdoVz9uzZo9tv\nv91hWWVlZa0/YDD21ltvafv27YqLi1NcXJy++eYb3X///VqzZo27S2t0CgoKavTNYrFw72w9hIaG\nqqqqSlVVVfZlP90XhvrZvXu3RowY4e4yGrVvv/1WVqvVYVmzZs24R7EeysrK1K5dO73xxhvKycnR\n008/rS+//FLdunW74Da/+6BYUlKiadOm6Y477tC8efM4k3gJunXrpvz8fL3++uuqrq7Wnj17tGfP\nHo0aNcrdpTU6O3bs0L59+5Sbm6vc3FxdeeWVWrZsmaZPn+7u0hqdgIAApaena8eOHaqurlZ2dra2\nb9+uMWPGuLu0Ric+Pl5+fn5KT0/XuXPntH//fu3cuVPDhw93d2mN1sGDBzmbeIn69++vQ4cO6dVX\nX5XNZtN//vMffi7r6dSpU5owYYIKCgpktVq1ceNGffvtt7Xejudh+53/qfjcc89p+fLlCggIcFh+\n2223KTk52U1VNV65ubl64okn9OWXX6pjx4566KGH1LdvX3eX1eglJCRo4cKF+uMf/+juUhql999/\nX8uXL9exY8fUpk0bJScn8z+Rejp69KhSU1P16aefKigoSHfffbfGjh3r7rIapaqqKkVGRmr79u3q\n1KmTu8tp1N5//32tXLlSx44d05VXXqnZs2fr+uuvd3dZjdLWrVu1cuVKnTp1SpGRkUpJSVFYWNgF\n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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1263e1eb8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Instantiate the linear model and visualizer\n",
    "lasso = Lasso()\n",
    "visualizer = PredictionError(lasso)\n",
    "\n",
    "visualizer.fit(X_train, y_train)  # Fit the training data to the visualizer\n",
    "visualizer.score(X_test, y_test)  # Evaluate the model on the test data\n",
    "g = visualizer.show()             # Draw/show/show the data"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Classifier Evaluation**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 79,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Classifier Evaluation Imports\n",
    "\n",
    "from sklearn.naive_bayes import GaussianNB\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "from sklearn.ensemble import RandomForestClassifier\n",
    "from sklearn.model_selection import train_test_split\n",
    "\n",
    "from yellowbrick.classifier import ClassificationReport, ROCAUC, ClassBalance"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 80,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "# Load the classification data set\n",
    "data = wine\n",
    "\n",
    "# Specify the features of interest and the classes of the target\n",
    "features = [\n",
    "        'fixed acidity', 'volatile acidity', 'citric acid', 'residual sugar', 'chlorides', 'free sulfur dioxide',\n",
    "        'density', 'pH', 'sulphates', 'alcohol'\n",
    "    ]\n",
    "\n",
    "classes = data['qualitybin']\n",
    "\n",
    "# Extract the numpy arrays from the data frame\n",
    "X = data[features].as_matrix()\n",
    "y = data['qualitybin'].as_matrix()\n",
    "\n",
    "# Create the train and test data\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 81,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "ename": "KeyError",
     "evalue": "'high'",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mKeyError\u001b[0m                                  Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-81-4c8e0ef2dbcf>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m      4\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      5\u001b[0m \u001b[0mvisualizer\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfit\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mX_train\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my_train\u001b[0m\u001b[0;34m)\u001b[0m  \u001b[0;31m# Fit the training data to the visualizer\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 6\u001b[0;31m \u001b[0mvisualizer\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mscore\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mX_test\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my_test\u001b[0m\u001b[0;34m)\u001b[0m  \u001b[0;31m# Evaluate the model on the test data\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      7\u001b[0m \u001b[0mg\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mvisualizer\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mshow\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m             \u001b[0;31m# Draw/show/show the data\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/Users/tuulimorrill/anaconda3/lib/python3.6/site-packages/yellowbrick/classifier.py\u001b[0m in \u001b[0;36mscore\u001b[0;34m(self, X, y, **kwargs)\u001b[0m\n\u001b[1;32m    133\u001b[0m         \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mscores\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmap\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;32mlambda\u001b[0m \u001b[0ms\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mdict\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mzip\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mclasses_\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0ms\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mscores\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;36m3\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    134\u001b[0m         \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mscores\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mdict\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mzip\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkeys\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mscores\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 135\u001b[0;31m         \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdraw\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0my\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my_pred\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    136\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    137\u001b[0m     \u001b[0;32mdef\u001b[0m \u001b[0mdraw\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my_pred\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/Users/tuulimorrill/anaconda3/lib/python3.6/site-packages/yellowbrick/classifier.py\u001b[0m in \u001b[0;36mdraw\u001b[0;34m(self, y, y_pred)\u001b[0m\n\u001b[1;32m    154\u001b[0m         \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmatrix\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    155\u001b[0m         \u001b[0;32mfor\u001b[0m \u001b[0mcls\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mclasses_\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 156\u001b[0;31m             \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmatrix\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mscores\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'precision'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mcls\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mscores\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'recall'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mcls\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mscores\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'f1'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mcls\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    157\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    158\u001b[0m         \u001b[0;32mfor\u001b[0m \u001b[0mcolumn\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmatrix\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m+\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;31mKeyError\u001b[0m: 'high'"
     ]
    }
   ],
   "source": [
    "# Instantiate the classification model and visualizer\n",
    "bayes = GaussianNB()\n",
    "visualizer = ClassificationReport(bayes, classes=classes)\n",
    "\n",
    "visualizer.fit(X_train, y_train)  # Fit the training data to the visualizer\n",
    "visualizer.score(X_test, y_test)  # Evaluate the model on the test data\n",
    "g = visualizer.show()             # Draw/show/show the data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
